package ch10_IO流与文件.缓冲流;

import java.io.*;
import java.nio.charset.StandardCharsets;

/**
 * @author 挚爱之夕
 * @date 2021/8/27 - 08 - 27 - 11:45
 * @Description: ch10.缓冲流
 * @Version: 1.0
 */
public class BufferedInputStreamDemo {
    public static void main(String[] args) {
        String src = "E:" + File.separatorChar + "Test.txt";    //要读取的文本文件
        int i = 0;//存放当前未读取的字节
        try (InputStream is = new FileInputStream(src)) {
            BufferedInputStream bis = new BufferedInputStream(is);//套接在输入流上
            bis.mark(1024); //标记当前位置（尚未作读取操作，当前位置为0）
            System.out.print("第一次读取：");
            while ((i = bis.read()) != -1) { //每次读取1字节
                System.out.printf("%-3X", i);//以16进制输出
            }
            bis.reset();    //回到之前标记的位置（从新读取）
            System.out.print("\n第2次读取：");
            while ((i = bis.read()) != -1) {
                System.out.printf("%-3c", (char) i);//强制将字节转换为字符
            }
            System.out.println();
            /*
            以下代码做验证用
             */
            String s = "语言";
            byte[] bs = s.getBytes(StandardCharsets.UTF_8);//以UTF_8得到s的字节数组
            System.out.print("[" + s + "]在文件中所占的 " + bs.length + " 字节为： ");
            for (byte b : bs
            ) {
                System.out.printf("%-3X", b);//以16进制输出bs的全部字节
            }
        } catch (FileNotFoundException e) {
            System.out.println("找不到读取的文件！");
        } catch (IOException e) {
            System.out.println("读取过程出现了I/O 错误！");
        }
    }
}
